﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using DynamicComboBox;

namespace Character_Creator
{
    public enum ROLL_METHODS { ROLL_STANDARD, ROLL_CLASSIC, ROLL_HEROIC };

    public partial class CharacterCreator : Form
    {
        CharacterInfo character;
        AbilityScore rolledScores;

        public CharacterCreator()
        {
            InitializeComponent();
            ResetCreator();
        }
        private void ResetCreator()
        {
            character = new CharacterInfo();
            rolledScores = new AbilityScore();
            PopulateRaceBox();

            CharacterEditorPages.TabIndex = 0;
            StandardMethodRadioButton.Checked = true;
            ClassicMethodRadioButton.Checked = false;
            HeroicMethodRadioButton.Checked = false;
            AcceptScoresButton.Enabled = false;
            RollScoresButton.Enabled = true;
        }

        // ABILITY SCORE PAGE FUNCTIONALITY
        private void AbilityScorePage_RollScoresButtonClicked(object sender, EventArgs e)
        {
            rolledScores.RollScores();
            PrintRolledScoresAndModifiers();

            // If the sum of the modifiers is less than or equal to 0, allow a reroll
            // Otherwise, don't allow a reroll and enable the Accept Scores button
            int sum = 0;
            foreach (int mod in rolledScores.Modifiers)
            {
                sum += mod;
            }

            if (sum > 0)
            {
                RollScoresButton.Enabled = false;
                AcceptScoresButton.Enabled = true;
            }
        }
        private void AbilityScorePage_AcceptScoresButtonClicked(object sender, EventArgs e)
        {
            AbilityScore assignedAbilityScores = new AbilityScore();
            uint[] assignedScores = AssignAbilityScores();
            assignedAbilityScores.SetAbilityScores(assignedScores);

            character.SetCharacterScores(assignedAbilityScores);

            ++CharacterEditorPages.SelectedIndex;
        }
        private void AbilityScoresPage_StandardMethodChecked(object sender, EventArgs e)
        {
            if (StandardMethodRadioButton.Checked == true)
            {
                rolledScores.RollMethod = ROLL_METHODS.ROLL_STANDARD;
            }
        }
        private void AbilityScoresPage_ClassicMethodChecked(object sender, EventArgs e)
        {
            if(ClassicMethodRadioButton.Checked == true)
            {
                rolledScores.RollMethod = ROLL_METHODS.ROLL_CLASSIC;
            }
        }
        private void AbilityScoresPage_HeroicMethodChecked(object sender, EventArgs e)
        {
            if (HeroicMethodRadioButton.Checked == true)
            {
                rolledScores.RollMethod = ROLL_METHODS.ROLL_HEROIC;
            }
        }
        private void AbilityScoresPage_AbilityBoxChoiceChanged(object sender, EventArgs e)
        {
            // The sender will be the DynamicComboBox that is changing
            // Get the selected string from the changing box
            // If the selected string is an ability score, we can assume that it's a new choice and we want to have it removed from the other boxes
            // Otherwise, the user is selecting the default string, so we want it added back to the others
            // Internal DynamicComboBox functionality should handle the rest
            DynamicComboBox.DynamicComboBox dcb = (DynamicComboBox.DynamicComboBox)sender;
            string newAbility = dcb.Items[dcb.SelectedIndex].ToString();

            // Get a list of the all the dynamic boxes on this form
            foreach (DynamicComboBox.DynamicComboBox box in AbilityScoresGroupBox.Controls.OfType<DynamicComboBox.DynamicComboBox>())
            {
                box.ProcessNewAbilityScoreChoice(dcb);
            }

            // Set the previous score string for the sender box
            dcb.PreviousScore = newAbility;
        }
        private void AbilityScoresPage_StandardMethodSelected(object sender, EventArgs e)
        {
            if (StandardMethodRadioButton.Checked == true)
            {
                rolledScores.RollMethod = ROLL_METHODS.ROLL_STANDARD;
            }
        }
        private void AbilityScoresPage_ClassicMehodSelected(object sender, EventArgs e)
        {
            if (ClassicMethodRadioButton.Checked == true)
            {
                rolledScores.RollMethod = ROLL_METHODS.ROLL_CLASSIC;
            }
        }
        private void AbilityScoresPage_HeroicMethodSelected(object sender, EventArgs e)
        {
            if (HeroicMethodRadioButton.Checked == true)
            {
                rolledScores.RollMethod = ROLL_METHODS.ROLL_HEROIC;
            }
        }
        private uint[] AssignAbilityScores()
        {
            uint[] scores = new uint[6];

            foreach (DynamicComboBox.DynamicComboBox dcb in AbilityScoresGroupBox.Controls.OfType<DynamicComboBox.DynamicComboBox>())
            {
                string selectedScoreName = dcb.Items[dcb.SelectedIndex].ToString();
                string correspondingTextBox = "AbilityScoreTextBox";
                string dcbNumber = dcb.Name;
                dcbNumber = dcbNumber.Replace("AbilityScoreDynamicBox", "");
                correspondingTextBox += dcbNumber;

                TextBox scoreTextBox = new TextBox();
                foreach(TextBox tb in AbilityScoresGroupBox.Controls.OfType<TextBox>())
                {
                    if(correspondingTextBox.Equals(tb.Name))
                    {
                        scoreTextBox = tb;
                    }
                }

                uint score = Convert.ToUInt32(scoreTextBox.Text);

                switch(selectedScoreName)
                {
                    case "Strength":
                    {
                        scores[0] = score;
                        break;
                    }
                    case "Dexterity":
                    {
                        scores[1] = score;
                        break;
                    }
                    case "Constitution":
                    {
                        scores[2] = score;
                        break;
                    }
                    case "Intelligence":
                    {
                        scores[3] = score;
                        break;
                    }
                    case "Wisdom":
                    {
                        scores[4] = score;
                        break;
                    }
                    case "Charisma":
                    {
                        scores[5] = score;
                        break;
                    }
                }
            }

            return scores;
        }
        private void PrintRolledScoresAndModifiers()
        {
            AbilityScoreTextBox1.Text = rolledScores.Scores[0].ToString();
            AbilityScoreTextBox2.Text = rolledScores.Scores[1].ToString();
            AbilityScoreTextBox3.Text = rolledScores.Scores[2].ToString();
            AbilityScoreTextBox4.Text = rolledScores.Scores[3].ToString();
            AbilityScoreTextBox5.Text = rolledScores.Scores[4].ToString();
            AbilityScoreTextBox6.Text = rolledScores.Scores[5].ToString();

            AbilityModifierTextBox1.Text = rolledScores.Modifiers[0].ToString();
            AbilityModifierTextBox2.Text = rolledScores.Modifiers[1].ToString();
            AbilityModifierTextBox3.Text = rolledScores.Modifiers[2].ToString();
            AbilityModifierTextBox4.Text = rolledScores.Modifiers[3].ToString();
            AbilityModifierTextBox5.Text = rolledScores.Modifiers[4].ToString();
            AbilityModifierTextBox6.Text = rolledScores.Modifiers[5].ToString();
        }

        // RACE PAGE FUNCTIONALITY
        private void PopulateRaceBox()
        {
            List<Race> coreBaseRaces = GenerateCoreBaseRaces();
            foreach (Race race in coreBaseRaces)
            {
                RaceListBox.Items.Add(race);
            }
        }
        private List<Race> GenerateCoreBaseRaces()
        {
            List<Race> coreBaseRaces = new List<Race>();

            coreBaseRaces.Add(GenerateDwarfRace());
            coreBaseRaces.Add(GenerateElfRace());
            coreBaseRaces.Add(GenerateGnomeRace());
            coreBaseRaces.Add(GenerateHalflingRace());
            coreBaseRaces.Add(GenerateHumanRace());
            coreBaseRaces.Add(GenerateHalfElfRace());
            coreBaseRaces.Add(GenerateHalfOrcRace());

            return coreBaseRaces;
        }
        private Race GenerateDwarfRace()
        {
            List<Ability> dwarfAbilities = new List<Ability>();
            dwarfAbilities.Add(new Ability("Slow and Steady", "Dwarves have a base speed of 20 feet, but their speed is never modified by armor or encumbrance.", "Core Rulebook 21"));
            dwarfAbilities.Add(new Ability("Darkvision", "Dwarves can see in the dark up to 60 feet.", "Core Rulebook 21"));
            dwarfAbilities.Add(new Ability("Defensive Training", "Dwarves get a +4 dodge bonus to AC against monsters of the giant subtype.", "Core Rulebook 21"));
            dwarfAbilities.Add(new Ability("Greed", "Dwarves receive a +2 racial bonus on Appraise skill checks made to determine the price of nonmagical goods that contain precious metals or gemstones.", "Core Rulebook 21"));
            dwarfAbilities.Add(new Ability("Hatred", "Dwarves receive a +1 bonus on attack rolls against humanoid creatures of the orc and goblinoid subtypes due to special training against these hated foes.", "Core Rulebook 21"));
            dwarfAbilities.Add(new Ability("Hardy", "Dwarves receive a +2 racial bonus on saving throws against poison, spells, and spell-like abilities.", "Core Rulebook 21"));
            dwarfAbilities.Add(new Ability("Stability", "Dwarves receive a +4 racial bonus on their Combat Maneuver Defense when resisting a bull rush or trip attempt while standing on the ground.", "Core Rulebook 21"));
            dwarfAbilities.Add(new Ability("Stonecunning", "Dwarves receive a +2 bonus on Perception checks to potentially notice unusual stonework, such as traps and hidden doors located in stone walls or floors. They receive a check to notice such features whenever they pass within 10 feet of them, whether or not they are actively looking.", "Core Rulebook 21"));
            dwarfAbilities.Add(new Ability("Weapon Familiarity", "Dwarves are proficient with battleaxes, heavy picks, and warhammers, and treat any weapon with the word \"dwarven\" in its nameas a martial weapon.", "Core Rulebook 21"));

            List<string> languages = new List<string>();
            languages.Add("Common");
            languages.Add("Dwarven");
            languages.Add("Giant*");
            languages.Add("Gnome*");
            languages.Add("Goblin*");
            languages.Add("Orc*");
            languages.Add("Terran*");
            languages.Add("Undercommon*");

            int[] adjusts = new int[6];
            adjusts[0] = 0;
            adjusts[1] = 0;
            adjusts[2] = 2;
            adjusts[3] = 0;
            adjusts[4] = 2;
            adjusts[5] = -2;

            return new Race("Dwarf", "Medium", dwarfAbilities, adjusts, languages);
        }
        private Race GenerateElfRace()
        {
            List<Ability> elfAbilities = new List<Ability>();
            elfAbilities.Add(new Ability("Normal Speed", "Elves have a base speed of 30 feet.", "Core Rulebook 22"));
            elfAbilities.Add(new Ability("Low-Light Vision", "Elves can see twive as far as humans in conditions of dim light. See Chapter 7.", "Core Rulebook 22"));
            elfAbilities.Add(new Ability("Elven Immunities", "Elves are immune to magic sleep effects and get a +2 racial saving throw bonus against enchantment spells and effects.", "Core Rulebook 22"));
            elfAbilities.Add(new Ability("Elven Magic", "Elves receive a +2 racial bonus on caster level checks made to overcome spell resistance. In addition, elves receive a +2 racial bonus on Spellcraft checks made to identify the properties of magic items.", "Core Rulebook 22"));
            elfAbilities.Add(new Ability("Keen Senses", "Elves receive a +2 racial bonus on Perception skill checks.", "Core Rulebook 22"));
            elfAbilities.Add(new Ability("Weapon Familiarity", "Elves are proficient with longbows (including composite longbows), longswords, rapiers, and shortbows (including composite shortbows), and treat any weapon with the word \"elven\" in its name as a martial weapon.", "Core Rulebook 22"));

            List<string> languages = new List<string>();
            languages.Add("Common");
            languages.Add("Elven");
            languages.Add("Celestial*");
            languages.Add("Draconic*");
            languages.Add("Gnoll*");
            languages.Add("Gnome*");
            languages.Add("Goblin*");
            languages.Add("Orc*");
            languages.Add("Sylvan*");

            int[] adjusts = new int[6];
            adjusts[0] = 0;
            adjusts[1] = 2;
            adjusts[2] = -2;
            adjusts[3] = 2;
            adjusts[4] = 0;
            adjusts[5] = 0;

            return new Race("Elf", "Medium", elfAbilities, adjusts, languages);
        }
        private Race GenerateGnomeRace()
        {
            List<Ability> gnomeAbilities = new List<Ability>();
            gnomeAbilities.Add(new Ability("Small", "Gnomes are Small creatures and gain a +1 size bonus to their AC, and +1 size bonus on attack rolls, a -1 penalty to their Combat Maneuver Bonus and Combat Maneuver Defense, and a +4 size bonus on Stealth checks.", "Core Rulebook 23"));
            gnomeAbilities.Add(new Ability("Slow Speed", "Gnomes have a base speed of 20 feet.", "Core Rulebook 23"));
            gnomeAbilities.Add(new Ability("Low-Light Vision", "Gnomes can see twice as far as humans in conditions of dim light. See Chapter 7.", "Core Rulebook 23"));
            gnomeAbilities.Add(new Ability("Defensive Training", "Gnomes get a +4 dodge bonus to AC against monsters of the giant subtype.", "Core Rulebook 23"));
            gnomeAbilities.Add(new Ability("Gnome Magic", "Gnomes add +1 to the DC of any saving throws against illusion spells that they cast. Gnomes with a Charisma of 11 or higher also gain the following spell-like abilities: 1/day - dancing lights, ghost sound, presitidigitation, and speak with animals. The caster level for these effects is queal to the gnome\'s level. The DC for these spells is eual to 10 + the spell's level + the gnome\'s Charisma modifier.", "Core Rulebook 23"));
            gnomeAbilities.Add(new Ability("Hatred", "Gnomes receive a +1 bonus on attack rolls against humanoid creatures of the reptilian and goblinoid subtypes due to special training against these hated foes.", "Core Rulebook 23"));
            gnomeAbilities.Add(new Ability("Illusion Resistance", "Gnomes get a +2 racial saving throw bonus against illusion spells and effects.", "Core Rulebook 23"));
            gnomeAbilities.Add(new Ability("Keen Senses", "Gnomes receive a +2 racial bonus on Perception skill checks.", "Core Rulebook 23"));
            gnomeAbilities.Add(new Ability("Obsessive", "Gnomes receive a +2 racial bonus on a Craft or Profession skill of their choice.", "Core Rulebook 23"));
            gnomeAbilities.Add(new Ability("Weapon Familiarity", "Gnomes treat any weapon with the word \"gnome\" in its name as a martial weapon.", "Core Rulebook 23"));

            List<string> languages = new List<string>();
            languages.Add("Common");
            languages.Add("Gnome");
            languages.Add("Sylvan");
            languages.Add("Draconic*");
            languages.Add("Dwarven*");
            languages.Add("Elven*");
            languages.Add("Giant*");
            languages.Add("Goblin*");
            languages.Add("Orc*");

            int[] adjusts = new int[6];
            adjusts[0] = -2;
            adjusts[1] = 0;
            adjusts[2] = 2;
            adjusts[3] = 0;
            adjusts[4] = 0;
            adjusts[5] = 2;

            return new Race("Gnome", "Small", gnomeAbilities, adjusts, languages);
        }
        private Race GenerateHalflingRace()
        {
            List<Ability> halflingAbilities = new List<Ability>();
            halflingAbilities.Add(new Ability("Small", "Halflings are Small creatures and gain a +1 size bonus to their AC, a +1 size bonus on attack rolls, a -1 penalty to their Combat Maneuver Bonus and Combat Maneuver Defense, and a +4 size bonus on Stealth checks.", "Core Rulebook 23"));
            halflingAbilities.Add(new Ability("Slow Speed", "Halflings have a base speed of 20 feet.", "Core Rulebook 23"));
            halflingAbilities.Add(new Ability("Fearless", "Halflings receive a +2 racial bonus on all saving throws against fear. This bonus stacks with the bonus granted by halfling luck.", "Core Rulebook 25"));
            halflingAbilities.Add(new Ability("Halfling Luck", "Halflings receive a +1 racial bonus on all saving throws.", "Core Rulebook 25"));
            halflingAbilities.Add(new Ability("Keen Senses", "Halflings receive a +2 racial bonus on Perception skill checks.", "Core Rulebook 25"));
            halflingAbilities.Add(new Ability("Sure-Footed", "Halflings received a +2 racial bonus on Acrobatics and Climb skill checks.", "Core Rulebook 25"));
            halflingAbilities.Add(new Ability("Weapon Familiarity", "Halflings are proficient with slings and treat any weapon with the word \"halfling\" in its name as a martial weapon.", "Core Rulebook 25"));

            List<string> languages = new List<string>();
            languages.Add("Common");
            languages.Add("Halfling");
            languages.Add("Dwarven*");
            languages.Add("Elven*");
            languages.Add("Gnome*");
            languages.Add("Goblin*");

            int[] adjusts = new int[6];
            adjusts[0] = -2;
            adjusts[1] = 2;
            adjusts[2] = 0;
            adjusts[3] = 0;
            adjusts[4] = 0;
            adjusts[5] = 2;

            return new Race("Halfling", "Medium", halflingAbilities, adjusts, languages);
        }
        private Race GenerateHumanRace()
        {
            List<Ability> humanAbilities = new List<Ability>();
            humanAbilities.Add(new Ability("Normal Speed", "Humans have a base speed of 30 feet.", ""));
            humanAbilities.Add(new Ability("Bonus Feat", "Humans select one extra feat at 1st level.", ""));
            humanAbilities.Add(new Ability("Skilled", "Humans gain an additional skill rank at first level and one additional rank whenever they gain a level.", ""));

            List<string> languages = new List<string>();
            languages.Add("Common");

            return new Race("Human", "Medium", humanAbilities, new int[6], languages);
        }
        private Race GenerateHalfElfRace()
        {
            List<Ability> halfelfAbilities = new List<Ability>();
            halfelfAbilities.Add(new Ability("Normal Speed", "Half-elves have a base land speed of 30 feet.", ""));
            halfelfAbilities.Add(new Ability("Low-Light Vision", "Half-elves can see twice as far as humans in conditions of dim light. See Additional Rules.", ""));
            halfelfAbilities.Add(new Ability("Adaptability", "Half-elves receive Skill Focus as a bonus feat at 1st level.", ""));
            halfelfAbilities.Add(new Ability("Elf Blood", "Half-elves count as both elves and humans for any effect related to race.", ""));
            halfelfAbilities.Add(new Ability("Elven Immunities", "Half-elves are immune to magic sleep effects and get a +2 racial saving throw bonus against enchantment spells and effects.", ""));
            halfelfAbilities.Add(new Ability("Keen Senses", "Half-elves receive a +2 racial bonus on Perception skill checks.", ""));
            halfelfAbilities.Add(new Ability("Multitalented", "Half-elves choose two favored classes at first level and gain +1 hit point or +1 skill point whenever they take in level in either of those classes. See Classes for more information about favored classes.", ""));

            List<string> languages = new List<string>();
            languages.Add("Common");
            languages.Add("Elven");

            return new Race("Half-elf", "Medium", halfelfAbilities, new int[6], languages);
        }
        private Race GenerateHalfOrcRace()
        {
            List<Ability> halforcAbilities = new List<Ability>();
            halforcAbilities.Add(new Ability("Normal Speed", "Half-orcs have a base speed of 30 feet.", ""));
            halforcAbilities.Add(new Ability("Darkvision", "Half-orcs can see in the dark up to 60 feet.", ""));
            halforcAbilities.Add(new Ability("Intimidating", "Half-orcs receive a +2 racial bonus on Intimidate skill checks due to their fearsome nature.", ""));
            halforcAbilities.Add(new Ability("Orc Blood", "Half-orcs counts as both humans and orcs for any effect related to race.", ""));
            halforcAbilities.Add(new Ability("Orc Ferocity", "Once per day, when a half-orc is brought below 0 hit points but not killed, he can fight on for one more round as if disabled. At the end of his next turn, unless brought to above 0 hit points, he immediately falls unconscious and begins dying.", ""));
            halforcAbilities.Add(new Ability("Weapon Familiarity", "Half-orcs are proficient with greataxes and falchions and treat any weapon with the word \"orc\" in its name as a martial weapon.", ""));

            List<string> languages = new List<string>();
            languages.Add("Common");
            languages.Add("Orc");
            languages.Add("Abyssal*");
            languages.Add("Draconic*");
            languages.Add("Giant*");
            languages.Add("Gnoll*");
            languages.Add("Goblin*");

            return new Race("Half-orc", "Medium", halforcAbilities, new int[6], languages);
        }
        private void RaceEditorPage_RaceListBoxIndexChanged(object sender, EventArgs e)
        {
            RaceTextBox.Clear();
            Race currRace = (Race)RaceListBox.Items[RaceListBox.SelectedIndex];

            string newline = System.Environment.NewLine + System.Environment.NewLine;
            foreach (Ability ability in currRace.RacialAbilities)
            {
                RaceTextBox.Text += (ability.Name + ": " + ability.Description + newline);
            }
        }
        private void RaceEditorPage_AcceptRaceButtonClicked(object sender, EventArgs e)
        {
            string chosenRace = RaceListBox.Items[RaceListBox.SelectedIndex].ToString();
            if (chosenRace.Equals("Human") || chosenRace.Equals("Half-elf") || chosenRace.Equals("Half-orc"))
            {
                HumanAttributeSelector has = new HumanAttributeSelector();

                if (DialogResult.OK == has.ShowDialog(this))
                {
                    switch (has.ChosenAbility)
                    {
                        case "Strength":
                        {
                            character.CharacterScores.Scores[0] += 2;
                            break;
                        }
                        case "Dexterity":
                        {
                            character.CharacterScores.Scores[1] += 2;
                            break;
                        }
                        case "Constitution":
                        {
                            character.CharacterScores.Scores[2] += 2;
                            break;
                        }
                        case "Intelligence":
                        {
                            character.CharacterScores.Scores[3] += 2;
                            break;
                        }
                        case "Wisdom":
                        {
                            character.CharacterScores.Scores[4] += 2;
                            break;
                        }
                        case "Charisma":
                        {
                            character.CharacterScores.Scores[5] += 2;
                            break;
                        }
                    }
                }

            }

            character.SetCharacterRace((Race)RaceListBox.Items[RaceListBox.SelectedIndex]);

            ++CharacterEditorPages.SelectedIndex;
        }

        // CLASS PAGE FUNCIONALITY
        private void PopulateClassBox()
        {
        }
        private List<Class> GenerateCoreBaseClasses()
        {
            List<Class> coreClasses = new List<Class>();

            coreClasses.Add(GenerateBarbarianClass());
            coreClasses.Add(GenerateBardClass());
            coreClasses.Add(GenerateClericClass());
            coreClasses.Add(GenerateDruidClass());
            coreClasses.Add(GenerateFighterClass());
            coreClasses.Add(GenerateMonkClass());
            coreClasses.Add(GeneratePaladinClass());
            coreClasses.Add(GenerateRangerClass());
            coreClasses.Add(GenerateRogueClass());
            coreClasses.Add(GenerateSorcererClass());
            coreClasses.Add(GenerateWizardClass());

            return coreClasses;
        }
        private Class GenerateBarbarianClass()
        {
            return new Class("Barbarian", "Core Rulebook ", 1, 4, new List<Skill>());
        }
        private Class GenerateBardClass()
        {
            return new Class("Bard", "Core Rulebook ", 0, 6, new List<Skill>());
        }
        private Class GenerateClericClass()
        {
            return new Class("Cleric", "Core Rulebook ", 0, 2, new List<Skill>());
        }
        private Class GenerateDruidClass()
        {
            return new Class("Druid", "Core Rulebook ", 0, 4, new List<Skill>());
        }
        private Class GenerateFighterClass()
        {
            return new Class("Fighter", "Core Rulebook ", 1, 2, new List<Skill>());
        }
        private Class GenerateMonkClass()
        {
            return new Class("Monk", "Core Rulebook ", 0, 4, new List<Skill>());
        }
        private Class GeneratePaladinClass()
        {
            return new Class("Paladin", "Core Rulebook ", 1, 2, new List<Skill>());
        }
        private Class GenerateRangerClass()
        {
            return new Class("Ranger", "Core Rulebook ", 1, 6, new List<Skill>());
        }
        private Class GenerateRogueClass()
        {
            return new Class("Rogue", "Core Rulebook ", 0, 8, new List<Skill>());
        }
        private Class GenerateSorcererClass()
        {
            return new Class("Sorcerer", "Core Rulebook ", 0, 2, new List<Skill>());
        }
        private Class GenerateWizardClass()
        {
            return new Class("Wizard", "Core Rulebook", 0, 2, new List<Skill>());
        }


        // MAIN MENU STRIP FUNCTIONALITY
        private void MainMenu_NewCharacterSelected(object sender, EventArgs e)
        {

        }
        private void MainMenu_LoadCharacterSelected(object sender, EventArgs e)
        {
        }
        private void MainMenu_SaveCharacterSelected(object sender, EventArgs e)
        {
        }
        private void MainMenu_ExitSelected(object sender, EventArgs e)
        {
            Application.Exit();
        }




    }
}
